diff --git a/system/libraries/Profiler.php b/system/libraries/Profiler.php
index 4e556b2..4796e84 100644
--- a/system/libraries/Profiler.php
+++ b/system/libraries/Profiler.php
@@ -516,7 +516,7 @@
 			.'<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_session_data').'&nbsp;&nbsp;(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_session_data\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)</legend>'
 			.'<table style="width:100%;display:none;" id="ci_profiler_session_data">';
 
-		foreach ($this->CI->session->all_userdata() as $key => $val)
+		foreach ($this->CI->session->userdata() as $key => $val)
 		{
 			if (is_array($val) OR is_object($val))
 			{
diff --git a/system/libraries/Session/Session.php b/system/libraries/Session/Session.php
index ac97b94..d9f2f50 100644
--- a/system/libraries/Session/Session.php
+++ b/system/libraries/Session/Session.php
@@ -238,9 +238,14 @@
 	 * @param	string	Item key
 	 * @return	string	Item value or NULL if not found
 	 */
-	public function userdata($item)
+	public function userdata($item = NULL)
 	{
-		return isset($this->userdata[$item]) ? $this->userdata[$item] : NULL;
+		if (isset($item))
+		{
+			return isset($this->userdata[$item]) ? $this->userdata[$item] : NULL;
+		}
+
+		return isset($this->userdata) ? $this->userdata : array();
 	}
 
 	// ------------------------------------------------------------------------
@@ -248,35 +253,12 @@
 	/**
 	 * Fetch all session data
 	 *
+	 * @deprecated	3.0.0	Use userdata() with no parameters instead
 	 * @return	array	User data array
 	 */
 	public function all_userdata()
 	{
-		return isset($this->userdata) ? $this->userdata : NULL;
-	}
-
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Fetch all flashdata
-	 *
-	 * @return	array	Flash data array
-	 */
-	public function all_flashdata()
-	{
-		$out = array();
-
-		// loop through all userdata
-		foreach ($this->all_userdata() as $key => $val)
-		{
-			// if it contains flashdata, add it
-			if (strpos($key, self::FLASHDATA_KEY.self::FLASHDATA_OLD) !== FALSE)
-			{
-				$key = str_replace(self::FLASHDATA_KEY.self::FLASHDATA_OLD, '', $key);
-				$out[$key] = $val;
-			}
-		}
-		return $out;
+		return isset($this->userdata) ? $this->userdata : array();
 	}
 
 	// ------------------------------------------------------------------------
@@ -417,11 +399,25 @@
 	 * @param	string	Item key
 	 * @return	string
 	 */
-	public function flashdata($key)
+	public function flashdata($key = NULL)
 	{
-		// Prepend key and retrieve value
-		$flashdata_key = self::FLASHDATA_KEY.self::FLASHDATA_OLD.$key;
-		return $this->userdata($flashdata_key);
+		if (isset($key))
+		{
+			return $this->userdata(self::FLASHDATA_KEY.self::FLASHDATA_OLD.$key);
+		}
+
+		// Get our flashdata items from userdata
+		$out = array();
+		foreach ($this->userdata() as $key => $val)
+		{
+			if (strpos($key, self::FLASHDATA_KEY.self::FLASHDATA_OLD) !== FALSE)
+			{
+				$key = str_replace(self::FLASHDATA_KEY.self::FLASHDATA_OLD, '', $key);
+				$out[$key] = $val;
+			}
+		}
+
+		return $out;
 	}
 
 	// ------------------------------------------------------------------------
@@ -514,11 +510,25 @@
 	 * @param	string	Item key
 	 * @return	string
 	 */
-	public function tempdata($key)
+	public function tempdata($key = NULL)
 	{
-		// Prepend key and return value
-		$tempdata_key = self::FLASHDATA_KEY.self::FLASHDATA_EXP.$key;
-		return $this->userdata($tempdata_key);
+		if (isset($key))
+		{
+			return $this->userdata(self::FLASHDATA_KEY.self::FLASHDATA_EXP.$key);
+		}
+
+		// Get our tempdata items from userdata
+		$out = array();
+		foreach ($this->userdata() as $key => $val)
+		{
+			if (strpos($key, self::FLASHDATA_KEY.self::FLASHDATA_EXP) !== FALSE)
+			{
+				$key = str_replace(self::FLASHDATA_KEY.self::FLASHDATA_EXP, '', $key);
+				$out[$key] = $val;
+			}
+		}
+
+		return $out;
 	}
 
 	// ------------------------------------------------------------------------
@@ -531,13 +541,12 @@
 	 */
 	protected function _flashdata_mark()
 	{
-		foreach ($this->all_userdata() as $name => $value)
+		foreach ($this->userdata() as $name => $value)
 		{
 			$parts = explode(self::FLASHDATA_NEW, $name);
 			if (count($parts) === 2)
 			{
-				$new_name = self::FLASHDATA_KEY.self::FLASHDATA_OLD.$parts[1];
-				$this->set_userdata($new_name, $value);
+				$this->set_userdata(self::FLASHDATA_KEY.self::FLASHDATA_OLD.$parts[1], $value);
 				$this->unset_userdata($name);
 			}
 		}
@@ -552,7 +561,7 @@
 	 */
 	protected function _flashdata_sweep()
 	{
-		$userdata = $this->all_userdata();
+		$userdata = $this->userdata();
 		foreach (array_keys($userdata) as $key)
 		{
 			if (strpos($key, self::FLASHDATA_OLD))
@@ -581,7 +590,7 @@
 
 		// Unset expired elements
 		$now = time();
-		$userdata = $this->all_userdata();
+		$userdata = $this->userdata();
 		foreach (array_keys($userdata) as $key)
 		{
 			if (strpos($key, self::FLASHDATA_EXP) && $expirations[$key] < $now)
